﻿using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tools.Utils
{
    public class FileHelper
    {
        /// <summary>
        /// 根目录
        /// </summary>
        public static readonly string BasePath = AppDomain.CurrentDomain.BaseDirectory;

        public static readonly string CurrentPath = Environment.CurrentDirectory;
        /// <summary>
        /// 上传目录
        /// </summary>
        public static readonly string BaseDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\files\\";
        public static readonly string UploadFilePath = $"{CurrentPath}\\wwwroot\\";

        private static readonly string RelativePath = $"\\files\\{DateTime.Now:yyyyMMdd}\\";

        //文件对应图片
        public static Dictionary<List<string>, string> fileIconDictionary = new Dictionary<List<string>, string>()
        {
            { new List<string>(){ ".pdf",},"/images/pdf.png" },
            { new List<string>(){ ".mp4", ".m4v", ".wmv", ".asf", ".asx", ".rm", ".rmvb", ".mpg", ".mpeg", ".mpe", ".3gp", ".mov", ".avi", ".dat", ".mkv", ".flv",".vob"},"/images/video.png" },
            { new List<string>(){ ".mp3", ".aac", ".wav", ".cda", ".flac", ".m4a", ".mid", ".mka", ".mp2", ".mpa", ".mpc", ".ape", ".ofr", ".ogg", ".ra", ".wv",".tta",".ac3",".dts"},"/images/audio.png" }
        };


        /// <summary>
        /// 写入文件
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static (bool success, List<string> fileList, string errMsg) FileWrite(HttpRequest request)
        {
            List<KeyValuePair<string, byte[]>> fileList;
            try
            {
                fileList = GetFiles(request);
            }
            catch (System.Exception ex)
            {
                return (false, new List<string>(), ex.Message);
            }
            var fileIds = new List<string>();
            foreach (var item in fileList)
            {
                var name = $"{Guid.NewGuid():N}{item.Key}";

                var fileFullName = WriteFile(name, item.Value, $"{BasePath}{RelativePath}");
                if (string.IsNullOrWhiteSpace(fileFullName)) continue;

                fileIds.Add(name);
            }
            return (fileIds.Any(), fileIds, fileIds.Any() ? "" : "写入文件失败");
        }

        /// <summary>
        /// 读取文件
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static FileContentResult FileRead(string name)
        {
            return new FileContentResult(FileToByte(name, $"{BasePath}{RelativePath}"), "application/octet-stream") { FileDownloadName = name };
        }

        /// <summary>
        /// 读取文件
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static FileContentResult FileRead(string name,string path)
        {
            return new FileContentResult(FileToByte(name, path), "application/octet-stream") { FileDownloadName = name };
        }

        /// <summary>
        /// 读取文件转换成集合，根据行获取数据
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static List<string> FileReadList(string name)
        {
            var list = new List<string>();
            using (var stream = new StreamReader($"{BasePath}/Upload/{name}.txt", Encoding.Default))
            {
                string line;

                while ((line = stream.ReadLine()) != null)
                {
                    list.Add(line);
                }
            }

            return list;
        }

        /// <summary>
        /// 读取文件内容，存入什么格式，获取出来什么格式
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static string FileReadStr(string name)
        {
            var str = "";

            using (var stream = new StreamReader($"{CurrentPath}/Upload/{name}.txt", new UTF8Encoding()))
            {

                str = stream.ReadToEnd().ToString();
                //str = stream.ReadToEnd();
            }

            return str;
        }

        /// <summary>
        /// 获取文件
        /// </summary>
        /// <param name="request"></param>
        /// <param name="keys"></param>
        /// <param name="fileType"></param>
        /// <param name="allowNull"></param>
        /// <returns>文件后缀,文件流</returns>
        public static List<KeyValuePair<string, byte[]>> GetFiles(HttpRequest request, string keys = null, string[] fileType = null, bool allowNull = false)
        {
            var files = request.Form.Files;
            var fileList = new List<KeyValuePair<string, byte[]>>();
            const int maxsize = 100000 * 1024;

            if (allowNull && files.Count == 0) return fileList;
            if (files.Count == 0) throw new System.Exception("基础上传文件为空,请检查");

            foreach (var file in files)
            {
                if (!string.IsNullOrWhiteSpace(keys) && file?.Name != keys) continue;

                if (allowNull && (file == null || file.Length <= 0)) return fileList;

                if (file == null || file.Length <= 0) throw new System.Exception($"{keys ?? "指定文件名"}文件为空,请检查");

                var filename = Path.GetFileName(file.FileName);
                var fileSize = file.Length;
                var extension = Path.GetExtension(filename);
                if (string.IsNullOrWhiteSpace(extension)) throw new System.Exception("获取文件扩展名失败");
                var fileEx = extension.ToLower();

                if (fileType != null && !fileType.Contains(fileEx)) throw new System.Exception($"文件类型错误，只能导入{string.Join(",", fileType)}格式的文件");

                if (fileSize > maxsize) throw new System.Exception("文件大小超过100M,上传失败");

                var stream = file.OpenReadStream();

                var bytes = new byte[stream.Length];
                stream.Read(bytes, 0, bytes.Length);
                stream.Seek(0, SeekOrigin.Begin);
                fileList.Add(new KeyValuePair<string, byte[]>(fileEx, bytes));
            }
            return fileList;
        }

        /// <summary>
        /// 文件读取
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public static byte[] FileToByte(string filename, string filepath = null)
        {
            filepath = string.IsNullOrWhiteSpace(filepath) ? BaseDirectory : filepath;
            //if (!Directory.Exists(filepath)) Directory.CreateDirectory(filepath);
            try
            {
                using (var read = new FileInfo(Path.Combine(filepath, filename)).OpenRead())
                {
                    var buffer = new byte[read.Length];
                    read.Read(buffer, 0, Convert.ToInt32(read.Length));
                    read.Close();
                    return buffer;
                }
            }
            catch (System.Exception)
            {
                return null;
            }
        }

        /// <summary>
        /// 写入文件
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="bytes"></param>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public static string WriteFile(string filename, byte[] bytes, string filepath = null)
        {
            filepath = string.IsNullOrWhiteSpace(filepath) ? BaseDirectory : filepath;
            if (!Directory.Exists(filepath)) Directory.CreateDirectory(filepath);
            var realFile = Path.Combine(filepath, filename);
            try
            {
                using (var file = new FileStream(realFile, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    file.Write(bytes, 0, bytes.Length);
                    file.Close();
                }
            }
            catch (System.Exception)
            {
                realFile = null;
            }
            return realFile;
        }


        static Dictionary<string, string> MediaType = null;
        static readonly object lockObj = new object();
        static FileHelper()
        {
            if (MediaType == null)
            {
                lock (lockObj)
                {
                    if (MediaType == null)
                    {
                        MediaType = new Dictionary<string, string>()
                        {
                            #region MEME
                            {".323","text/h323"},
                            {".3gp","video/3gpp"},
                            {".aab","application/x-authoware-bin"},
                            {".aam","application/x-authoware-map"},
                            {".aas","application/x-authoware-seg"},
                            {".acx","application/internet-property-stream"},
                            {".ai","application/postscript"},
                            {".aif","audio/x-aiff"},
                            {".aifc","audio/x-aiff"},
                            {".aiff","audio/x-aiff"},
                            {".als","audio/X-Alpha5"},
                            {".amc","application/x-mpeg"},
                            {".ani","application/octet-stream"},
                            {".apk","application/vnd.android.package-archive"},
                            {".asc","text/plain"},
                            {".asd","application/astound"},
                            {".asf","video/x-ms-asf"},
                            {".asn","application/astound"},
                            {".asp","application/x-asap"},
                            {".asr","video/x-ms-asf"},
                            {".asx","video/x-ms-asf"},
                            {".au","audio/basic"},
                            {".avb","application/octet-stream"},
                            {".avi","video/x-msvideo"},
                            {".awb","audio/amr-wb"},
                            {".axs","application/olescript"},
                            {".bas","text/plain"},
                            {".bcpio","application/x-bcpio"},
                            {".bin ","application/octet-stream"},
                            {".bld","application/bld"},
                            {".bld2","application/bld2"},
                            {".bmp","image/bmp"},
                            {".bpk","application/octet-stream"},
                            {".bz2","application/x-bzip2"},
                            {".c","text/plain"},
                            {".cal","image/x-cals"},
                            {".cat","application/vnd.ms-pkiseccat"},
                            {".ccn","application/x-cnc"},
                            {".cco","application/x-cocoa"},
                            {".cdf","application/x-cdf"},
                            {".cer","application/x-x509-ca-cert"},
                            {".cgi","magnus-internal/cgi"},
                            {".chat","application/x-chat"},
                            {".class","application/octet-stream"},
                            {".clp","application/x-msclip"},
                            {".cmx","image/x-cmx"},
                            {".co","application/x-cult3d-object"},
                            {".cod","image/cis-cod"},
                            {".conf","text/plain"},
                            {".cpio","application/x-cpio"},
                            {".cpp","text/plain"},
                            {".cpt","application/mac-compactpro"},
                            {".crd","application/x-mscardfile"},
                            {".crl","application/pkix-crl"},
                            {".crt","application/x-x509-ca-cert"},
                            {".csh","application/x-csh"},
                            {".csm","chemical/x-csml"},
                            {".csml","chemical/x-csml"},
                            {".css","text/css"},
                            {".cur","application/octet-stream"},
                            {".dcm","x-lml/x-evm"},
                            {".dcr","application/x-director"},
                            {".dcx","image/x-dcx"},
                            {".der","application/x-x509-ca-cert"},
                            {".dhtml","text/html"},
                            {".dir","application/x-director"},
                            {".dll","application/x-msdownload"},
                            {".dmg","application/octet-stream"},
                            {".dms","application/octet-stream"},
                            {".doc","application/msword"},
                            {".docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
                            {".dot","application/msword"},
                            {".dvi","application/x-dvi"},
                            {".dwf","drawing/x-dwf"},
                            {".dwg","application/x-autocad"},
                            {".dxf","application/x-autocad"},
                            {".dxr","application/x-director"},
                            {".ebk","application/x-expandedbook"},
                            {".emb","chemical/x-embl-dl-nucleotide"},
                            {".embl","chemical/x-embl-dl-nucleotide"},
                            {".eps","application/postscript"},
                            {".epub","application/epub+zip"},
                            {".eri","image/x-eri"},
                            {".es","audio/echospeech"},
                            {".esl","audio/echospeech"},
                            {".etc","application/x-earthtime"},
                            {".etx","text/x-setext"},
                            {".evm","x-lml/x-evm"},
                            {".evy","application/envoy"},
                            {".exe","application/octet-stream"},
                            {".fh4","image/x-freehand"},
                            {".fh5","image/x-freehand"},
                            {".fhc","image/x-freehand"},
                            {".fif","application/fractals"},
                            {".flr","x-world/x-vrml"},
                            {".flv","flv-application/octet-stream"},
                            {".fm","application/x-maker"},
                            {".fpx","image/x-fpx"},
                            {".fvi","video/isivideo"},
                            {".gau","chemical/x-gaussian-input"},
                            {".gca","application/x-gca-compressed"},
                            {".gdb","x-lml/x-gdb"},
                            {".gif","image/gif"},
                            {".gps","application/x-gps"},
                            {".gtar","application/x-gtar"},
                            {".gz","application/x-gzip"},
                            {".h","text/plain"},
                            {".hdf","application/x-hdf"},
                            {".hdm","text/x-hdml"},
                            {".hdml","text/x-hdml"},
                            {".hlp","application/winhlp"},
                            {".hqx","application/mac-binhex40"},
                            {".hta","application/hta"},
                            {".htc","text/x-component"},
                            {".htm","text/html"},
                            {".html","text/html"},
                            {".hts","text/html"},
                            {".htt","text/webviewhtml"},
                            {".ice","x-conference/x-cooltalk"},
                            {".ico","image/x-icon"},
                            {".ief","image/ief"},
                            {".ifm","image/gif"},
                            {".ifs","image/ifs"},
                            {".iii","application/x-iphone"},
                            {".imy","audio/melody"},
                            {".ins","application/x-internet-signup"},
                            {".ips","application/x-ipscript"},
                            {".ipx","application/x-ipix"},
                            {".isp","application/x-internet-signup"},
                            {".it","audio/x-mod"},
                            {".itz","audio/x-mod"},
                            {".ivr","i-world/i-vrml"},
                            {".j2k","image/j2k"},
                            {".jad","text/vnd.sun.j2me.app-descriptor"},
                            {".jam","application/x-jam"},
                            {".jar","application/java-archive"},
                            {".java","text/plain"},
                            {".jfif","image/pipeg"},
                            {".jnlp","application/x-java-jnlp-file"},
                            {".jpe","image/jpeg"},
                            {".jpeg","image/jpeg"},
                            {".jpg","image/jpeg"},
                            {".jpz","image/jpeg"},
                            {".js","application/x-javascript"},
                            {".jwc","application/jwc"},
                            {".kjx","application/x-kjx"},
                            {".lak","x-lml/x-lak"},
                            {".latex","application/x-latex"},
                            {".lcc","application/fastman"},
                            {".lcl","application/x-digitalloca"},
                            {".lcr","application/x-digitalloca"},
                            {".lgh","application/lgh"},
                            {".lha","application/octet-stream"},
                            {".lml","x-lml/x-lml"},
                            {".lmlpack","x-lml/x-lmlpack"},
                            {".log","text/plain"},
                            {".lsf","video/x-la-asf"},
                            {".lsx","video/x-la-asf"},
                            {".lzh","application/octet-stream"},
                            {".m13","application/x-msmediaview"},
                            {".m14","application/x-msmediaview"},
                            {".m15","audio/x-mod"},
                            {".m3u","audio/x-mpegurl"},
                            {".m3url","audio/x-mpegurl"},
                            {".m4a","audio/mp4a-latm"},
                            {".m4b","audio/mp4a-latm"},
                            {".m4p","audio/mp4a-latm"},
                            {".m4u","video/vnd.mpegurl"},
                            {".m4v","video/x-m4v"},
                            {".ma1","audio/ma1"},
                            {".ma2","audio/ma2"},
                            {".ma3","audio/ma3"},
                            {".ma5","audio/ma5"},
                            {".man","application/x-troff-man"},
                            {".map","magnus-internal/imagemap"},
                            {".mbd","application/mbedlet"},
                            {".mct","application/x-mascot"},
                            {".mdb","application/x-msaccess"},
                            {".mdz","audio/x-mod"},
                            {".me","application/x-troff-me"},
                            {".mel","text/x-vmel"},
                            {".mht","message/rfc822"},
                            {".mhtml","message/rfc822"},
                            {".mi","application/x-mif"},
                            {".mid","audio/mid"},
                            {".midi","audio/midi"},
                            {".mif","application/x-mif"},
                            {".mil","image/x-cals"},
                            {".mio","audio/x-mio"},
                            {".mmf","application/x-skt-lbs"},
                            {".mng","video/x-mng"},
                            {".mny","application/x-msmoney"},
                            {".moc","application/x-mocha"},
                            {".mocha","application/x-mocha"},
                            {".mod","audio/x-mod"},
                            {".mof","application/x-yumekara"},
                            {".mol","chemical/x-mdl-molfile"},
                            {".mop","chemical/x-mopac-input"},
                            {".mov","video/quicktime"},
                            {".movie","video/x-sgi-movie"},
                            {".mp2","video/mpeg"},
                            {".mp3","audio/mpeg"},
                            {".mp4","video/mp4"},
                            {".mpa","video/mpeg"},
                            {".mpc","application/vnd.mpohun.certificate"},
                            {".mpe","video/mpeg"},
                            {".mpeg","video/mpeg"},
                            {".mpg","video/mpeg"},
                            {".mpg4","video/mp4"},
                            {".mpga","audio/mpeg"},
                            {".mpn","application/vnd.mophun.application"},
                            {".mpp","application/vnd.ms-project"},
                            {".mps","application/x-mapserver"},
                            {".mpv2","video/mpeg"},
                            {".mrl","text/x-mrml"},
                            {".mrm","application/x-mrm"},
                            {".ms","application/x-troff-ms"},
                            {".msg","application/vnd.ms-outlook"},
                            {".mts","application/metastream"},
                            {".mtx","application/metastream"},
                            {".mtz","application/metastream"},
                            {".mvb","application/x-msmediaview"},
                            {".mzv","application/metastream"},
                            {".nar","application/zip"},
                            {".nbmp","image/nbmp"},
                            {".nc","application/x-netcdf"},
                            {".ndb","x-lml/x-ndb"},
                            {".ndwn","application/ndwn"},
                            {".nif","application/x-nif"},
                            {".nmz","application/x-scream"},
                            {".nokia-op-logo","image/vnd.nok-oplogo-color"},
                            {".npx","application/x-netfpx"},
                            {".nsnd","audio/nsnd"},
                            {".nva","application/x-neva1"},
                            {".nws","message/rfc822"},
                            {".oda","application/oda"},
                            {".ogg","audio/ogg"},
                            {".oom","application/x-AtlasMate-Plugin"},
                            {".p10","application/pkcs10"},
                            {".p12","application/x-pkcs12"},
                            {".p7b","application/x-pkcs7-certificates"},
                            {".p7c","application/x-pkcs7-mime"},
                            {".p7m","application/x-pkcs7-mime"},
                            {".p7r","application/x-pkcs7-certreqresp"},
                            {".p7s","application/x-pkcs7-signature"},
                            {".pac","audio/x-pac"},
                            {".pae","audio/x-epac"},
                            {".pan","application/x-pan"},
                            {".pbm","image/x-portable-bitmap"},
                            {".pcx","image/x-pcx"},
                            {".pda","image/x-pda"},
                            {".pdb","chemical/x-pdb"},
                            {".pdf","application/pdf"},
                            {".pfr","application/font-tdpfr"},
                            {".pfx","application/x-pkcs12"},
                            {".pgm","image/x-portable-graymap"},
                            {".pict","image/x-pict"},
                            {".pko","application/ynd.ms-pkipko"},
                            {".pm","application/x-perl"},
                            {".pma","application/x-perfmon"},
                            {".pmc","application/x-perfmon"},
                            {".pmd","application/x-pmd"},
                            {".pml","application/x-perfmon"},
                            {".pmr","application/x-perfmon"},
                            {".pmw","application/x-perfmon"},
                            {".png","image/png"},
                            {".pnm","image/x-portable-anymap"},
                            {".pnz","image/png"},
                            {".pot,","application/vnd.ms-powerpoint"},
                            {".ppm","image/x-portable-pixmap"},
                            {".pps","application/vnd.ms-powerpoint"},
                            {".ppt","application/vnd.ms-powerpoint"},
                            {".pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"},
                            {".pqf","application/x-cprplayer"},
                            {".pqi","application/cprplayer"},
                            {".prc","application/x-prc"},
                            {".prf","application/pics-rules"},
                            {".prop","text/plain"},
                            {".proxy","application/x-ns-proxy-autoconfig"},
                            {".ps","application/postscript"},
                            {".ptlk","application/listenup"},
                            {".pub","application/x-mspublisher"},
                            {".pvx","video/x-pv-pvx"},
                            {".qcp","audio/vnd.qcelp"},
                            {".qt","video/quicktime"},
                            {".qti","image/x-quicktime"},
                            {".qtif","image/x-quicktime"},
                            {".r3t","text/vnd.rn-realtext3d"},
                            {".ra","audio/x-pn-realaudio"},
                            {".ram","audio/x-pn-realaudio"},
                            {".rar","application/octet-stream"},
                            {".ras","image/x-cmu-raster"},
                            {".rc","text/plain"},
                            {".rdf","application/rdf+xml"},
                            {".rf","image/vnd.rn-realflash"},
                            {".rgb","image/x-rgb"},
                            {".rlf","application/x-richlink"},
                            {".rm","audio/x-pn-realaudio"},
                            {".rmf","audio/x-rmf"},
                            {".rmi","audio/mid"},
                            {".rmm","audio/x-pn-realaudio"},
                            {".rmvb","audio/x-pn-realaudio"},
                            {".rnx","application/vnd.rn-realplayer"},
                            {".roff","application/x-troff"},
                            {".rp","image/vnd.rn-realpix"},
                            {".rpm","audio/x-pn-realaudio-plugin"},
                            {".rt","text/vnd.rn-realtext"},
                            {".rte","x-lml/x-gps"},
                            {".rtf","application/rtf"},
                            {".rtg","application/metastream"},
                            {".rtx","text/richtext"},
                            {".rv","video/vnd.rn-realvideo"},
                            {".rwc","application/x-rogerwilco"},
                            {".s3m","audio/x-mod"},
                            {".s3z","audio/x-mod"},
                            {".sca","application/x-supercard"},
                            {".scd","application/x-msschedule"},
                            {".sct","text/scriptlet"},
                            {".sdf","application/e-score"},
                            {".sea","application/x-stuffit"},
                            {".setpay","application/set-payment-initiation"},
                            {".setreg","application/set-registration-initiation"},
                            {".sgm","text/x-sgml"},
                            {".sgml","text/x-sgml"},
                            {".sh","application/x-sh"},
                            {".shar","application/x-shar"},
                            {".shtml","magnus-internal/parsed-html"},
                            {".shw","application/presentations"},
                            {".si6","image/si6"},
                            {".si7","image/vnd.stiwap.sis"},
                            {".si9","image/vnd.lgtwap.sis"},
                            {".sis","application/vnd.symbian.install"},
                            {".sit","application/x-stuffit"},
                            {".skd","application/x-Koan"},
                            {".skm","application/x-Koan"},
                            {".skp","application/x-Koan"},
                            {".skt","application/x-Koan"},
                            {".slc","application/x-salsa"},
                            {".smd","audio/x-smd"},
                            {".smi","application/smil"},
                            {".smil","application/smil"},
                            {".smp","application/studiom"},
                            {".smz","audio/x-smd"},
                            {".snd","audio/basic"},
                            {".spc","application/x-pkcs7-certificates"},
                            {".spl","application/futuresplash"},
                            {".spr","application/x-sprite"},
                            {".sprite","application/x-sprite"},
                            {".sdp","application/sdp"},
                            {".spt","application/x-spt"},
                            {".src","application/x-wais-source"},
                            {".sst","application/vnd.ms-pkicertstore"},
                            {".stk","application/hyperstudio"},
                            {".stl","application/vnd.ms-pkistl"},
                            {".stm","text/html"},
                            {".sv4cpio","application/x-sv4cpio"},
                            {".sv4crc","application/x-sv4crc"},
                            {".svf","image/vnd"},
                            {".svg","image/svg+xml"},
                            {".svh","image/svh"},
                            {".svr","x-world/x-svr"},
                            {".swf","application/x-shockwave-flash"},
                            {".swfl","application/x-shockwave-flash"},
                            {".t","application/x-troff"},
                            {".tad","application/octet-stream"},
                            {".talk","text/x-speech"},
                            {".tar","application/x-tar"},
                            {".taz","application/x-tar"},
                            {".tbp","application/x-timbuktu"},
                            {".tbt","application/x-timbuktu"},
                            {".tcl","application/x-tcl"},
                            {".tex","application/x-tex"},
                            {".texi","application/x-texinfo"},
                            {".texinfo","application/x-texinfo"},
                            {".tgz","application/x-compressed"},
                            {".thm","application/vnd.eri.thm"},
                            {".tif","image/tiff"},
                            {".tiff","image/tiff"},
                            {".tki","application/x-tkined"},
                            {".tkined","application/x-tkined"},
                            {".toc","application/toc"},
                            {".toy","image/toy"},
                            {".tr","application/x-troff"},
                            {".trk","x-lml/x-gps"},
                            {".trm","application/x-msterminal"},
                            {".tsi","audio/tsplayer"},
                            {".tsp","application/dsptype"},
                            {".tsv","text/tab-separated-values"},
                            {".ttf","application/octet-stream"},
                            {".ttz","application/t-time"},
                            {".txt","text/plain"},
                            {".uls","text/iuls"},
                            {".ult","audio/x-mod"},
                            {".ustar","application/x-ustar"},
                            {".uu","application/x-uuencode"},
                            {".uue","application/x-uuencode"},
                            {".vcd","application/x-cdlink"},
                            {".vcf","text/x-vcard"},
                            {".vdo","video/vdo"},
                            {".vib","audio/vib"},
                            {".viv","video/vivo"},
                            {".vivo","video/vivo"},
                            {".vmd","application/vocaltec-media-desc"},
                            {".vmf","application/vocaltec-media-file"},
                            {".vmi","application/x-dreamcast-vms-info"},
                            {".vms","application/x-dreamcast-vms"},
                            {".vox","audio/voxware"},
                            {".vqe","audio/x-twinvq-plugin"},
                            {".vqf","audio/x-twinvq"},
                            {".vql","audio/x-twinvq"},
                            {".vre","x-world/x-vream"},
                            {".vrml","x-world/x-vrml"},
                            {".vrt","x-world/x-vrt"},
                            {".vrw","x-world/x-vream"},
                            {".vts","workbook/formulaone"},
                            {".wav","audio/x-wav"},
                            {".wax","audio/x-ms-wax"},
                            {".wbmp","image/vnd.wap.wbmp"},
                            {".wcm","application/vnd.ms-works"},
                            {".wdb","application/vnd.ms-works"},
                            {".web","application/vnd.xara"},
                            {".wi","image/wavelet"},
                            {".wis","application/x-InstallShield"},
                            {".wks","application/vnd.ms-works"},
                            {".wm","video/x-ms-wm"},
                            {".wma","audio/x-ms-wma"},
                            {".wmd","application/x-ms-wmd"},
                            {".wmf","application/x-msmetafile"},
                            {".wml","text/vnd.wap.wml"},
                            {".wmlc","application/vnd.wap.wmlc"},
                            {".wmls","text/vnd.wap.wmlscript"},
                            {".wmlsc","application/vnd.wap.wmlscriptc"},
                            {".wmlscript","text/vnd.wap.wmlscript"},
                            {".wmv","audio/x-ms-wmv"},
                            {".wmx","video/x-ms-wmx"},
                            {".wmz","application/x-ms-wmz"},
                            {".wpng","image/x-up-wpng"},
                            {".wps","application/vnd.ms-works"},
                            {".wpt","x-lml/x-gps"},
                            {".wri","application/x-mswrite"},
                            {".wrl","x-world/x-vrml"},
                            {".wrz","x-world/x-vrml"},
                            {".ws","text/vnd.wap.wmlscript"},
                            {".wsc","application/vnd.wap.wmlscriptc"},
                            {".wv","video/wavelet"},
                            {".wvx","video/x-ms-wvx"},
                            {".wxl","application/x-wxl"},
                            {".x-gzip","application/x-gzip"},
                            {".xaf","x-world/x-vrml"},
                            {".xar","application/vnd.xara"},
                            {".xbm","image/x-xbitmap"},
                            {".xdm","application/x-xdma"},
                            {".xdma","application/x-xdma"},
                            {".xdw","application/vnd.fujixerox.docuworks"},
                            {".xht","application/xhtml+xml"},
                            {".xhtm","application/xhtml+xml"},
                            {".xhtml","application/xhtml+xml"},
                            {".xla","application/vnd.ms-excel"},
                            {".xlc","application/vnd.ms-excel"},
                            {".xll","application/x-excel"},
                            {".xlm","application/vnd.ms-excel"},
                            {".xls","application/vnd.ms-excel"},
                            {".xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
                            {".xlt","application/vnd.ms-excel"},
                            {".xlw","application/vnd.ms-excel"},
                            {".xm","audio/x-mod"},
                            {".xml","application/xml"},
                            {".xmz","audio/x-mod"},
                            {".xof","x-world/x-vrml"},
                            {".xpi","application/x-xpinstall"},
                            {".xpm","image/x-xpixmap"},
                            {".xsit","text/xml"},
                            {".xsl","text/xml"},
                            {".xul","text/xul"},
                            {".xwd","image/x-xwindowdump"},
                            {".xyz","chemical/x-pdb"},
                            {".yz1","application/x-yz1"},
                            {".z","application/x-compress"},
                            {".zac","application/x-zaurus-zac"},
                            {".zip","application/zip"},
                            {".json","application/json" }
	                        #endregion
                        };
                    }
                }
            }
        }


        public static string GetMediaTypeByFileExtension(string extension)
        {
            if (!string.IsNullOrEmpty(extension) && MediaType.ContainsKey(extension.ToLower()))
            {
                return MediaType[extension.ToLower()];
            }
            return "application/octet-stream";
        }
    }
}
